package 刷题10月.leecodehot100;

 class ListNode {
     int val;
     ListNode next;
     ListNode(int x) {
         val = x;
         next = null;
     }
 }

public class Solution {
//    public void reorderList(ListNode head) {
//        ListNode dummy=new ListNode(-1);
//        dummy.next=head;
//        ListNode fast=head;
//        ListNode slow=dummy;
//        while(fast!=null&&fast.next!=null){
//            fast=fast.next.next;
//            slow=slow.next;
//        }
//        ListNode current=dummy;
//        ListNode newhead=slow.next;
//        slow.next=null;
//        newhead=reverse(newhead);
//        while(newhead!=null){
//            ListNode slowtemp=head.next;
//            ListNode fasttemp=newhead.next;
//            current.next=head;
//            current.next.next=newhead;
//            current=current.next.next;
//            head=slowtemp;
//            newhead=fasttemp;
//        }
//        if(head!=null){
//            current.next=head;
//        }
//    }
//    public ListNode reverse(ListNode head){
//        ListNode pre=null;
//        while(head!=null){
//            ListNode temp=head.next;
//            head.next=pre;
//            pre=head;
//            head=temp;
//        }
//        return pre;
//    }
public void reorderList(ListNode head) {
    if(head==null){
        return;
    }
    ListNode mid=middlenode(head);
    ListNode l1=head;
    ListNode l2=mid.next;
    mid.next=null;
    l2=reverse(l2);
    mergeList(l1,l2);
}
    public ListNode middlenode(ListNode head){
        ListNode slow=head;
        ListNode fast=head;
        while (fast.next!=null&&fast.next.next!=null){
            slow=slow.next;
            fast=fast.next;
        }
        return slow;
    }
    public ListNode reverse(ListNode head){
        ListNode pre=null;
        while(head!=null){
            ListNode temp=head.next;
            head.next=pre;
            pre=head;
            head=temp;
        }
        return pre;
    }
    public void mergeList(ListNode l1,ListNode l2){
        ListNode l1_temp;
        ListNode l2_temp;
        while (l1!=null&&l2!=null){
            l1_temp=l1.next;
            l2_temp=l2.next;
            l1.next=l2;
            l1=l1_temp;
            l2.next=l1;
            l2=l2_temp;
        }
    }
}